from rest_framework import serializers
from .models import *


# serializers.Serializer ---- 自定义序列化器所继承的
# serializers.ModelSerializer ---- 专门针对模型类数据的序列化器


# 定义一个函数来验证btitle
# def check_btitle(value):
#     # value 经过前序的验证之后传来的btitle--->先经过类型校验，再经过约束条件校验得到的value
#     # 我们通过抛出ValidationError异常来判断是否发生错误
#
#     # 判断书名中是否包含"django"字符串
#     if "django" not in value:
#         raise serializers.ValidationError("这不是一本关于django的书")

# 定义一个针对BookInfo的模型类序列化器
class BookInfoModelSerializer(serializers.ModelSerializer):


    # # 对于非主键的隐藏字段不会自动序列化
    # heros = serializers.StringRelatedField(many=True)
    #
    # # 我们手动定义的字段，会覆盖自动生成的字段
    # btitle = serializers.CharField(max_length=20, min_length=2, label="名字")

    class Meta:
        # 指定要序列化的模型类对象
        model = BookInfo
        # 指定要序列化的字段

        fields = "__all__"   # __all__ 表示所有字段
        # 指定字段 : fields=[]
        # fields = ["id", "btitle", "bpub_date", "bread"]
        # exclude=[] 除指定字段外的所有字段
        # exclude = ['bread']

        # 我们可以使用extra_kwargs参数为BookInfoSerializer添加或者修改字段原有的约束条件
        extra_kwargs = {
            "bread": {"min_value": 0},
            # "btitle": {"validator": [check_btitle]}
        }


class HeroModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = HeroInfo
        fields = "__all__"




